본문으로 건너뛰기

01-040. 데이터 분석과 코딩

데이터 분석과 코딩 (Data Analysis and Coding)

데이터 분석은 원래 통계학에서 시작한 것으로 통계학은 컴퓨터가 발명되기 전에 시작한 것이라서 프로그래밍을 위한 코딩 필요 없었다. 종이와 연필, 펜을 사용했고 그 뒤에 계산을 위해서 컴퓨터 언어를 사용했고 스프레드시트와 데이터베이스가 발명되고 나서는 스프레드시트, 데이터베이스를 많이 사용하기 시작했다.

코딩(Coding, 컴퓨터 프로그래밍)을 데이터 분석에 사용하기 시작한 이유는 뚜렷하지 않지만 어떤 일을 할 때 비슷한 작업을 반복하게 되는데 이전에 했던 것을 조금씩 바꿔서 재실행해야 하는 일 많고 데이터를 분석하기 좋게 다듬을 때 스프레드시크와 데이터베이스만으로 처리하기에 불편한 경우가 많아 쓰기 시작했다. 원론적으로 보면 데이터 분석에 컴퓨터를 사용한 것은 스프레드시트와 데이터베이스가 개발되기 이전부터라고 할 수 있다.

데이터 분석에 적합한 컴퓨터 언어

데이터 분석을 하는데 어떤 컴퓨터 언어를 사용해도 되지만 데이터 분석에 R, Python을 가장 많이 사용한다. 데이터 분석에 적합한 언어는 분석에 적합한 인터렉티브 인터페이스 환경, 시각화 환경, 많은 통계와 수치 계산 관련 라이브러리를 제공하는 것이 좋다. Python과 R이 그런 언어이며 다른 언어들은 비교적 지원이 덜하거나 불편하다.

인터랙티브 언어 (Interactive Language)

데이터 분석에는 작성한 코드의 결과를 즉시 확인하고 반복적으로 수정할 수 있는 인터랙티브 모드를 지원하는 언어가 적합하다. R과 Python이 대표적으로 그런 코딩 환경을 제공한다. R은 처음부터 통계와 데이터 분석을 목적으로 개발되었기 때문에 처음 설치하고 난 뛰에 기본으로 제공되는 구성만으로 분석에 필요한 환경을 제공하고 문법도 분석에 적합하도록 고안되었다. 코딩환경 중에 특히 코드의 일부분만 선택적으로 실행하거나 순서에 상관없이 실행할 수 있는 노트북 형태의 환경을 기본적으로 지원한다. 이런 방식은 연구 개발을 하기 위한 코딩에 매우 적합한 방식이다. 데이터 분석을 위한 코딩은 일반적인 소프트웨어 개발환경과 개발 방법과는 차이가 있는데 소프트웨어 개발에서는 코드를 순차적으로 작성하고 실행 결과를 확인하기까지 비교적 많은 양의 코드를 작성해야 하기 때문이다. 하지만 과학 연구나 데이터 분석에서는 코드를 완성하기 전까지 부분부분 실행해가면서 그 결과를 즉시 확인하고 코드를 다시 수정한 뒤 다시 확인하는 것을 반복한다. 이런 반복 작업을 빈번하게 한 뒤에 최종 결과물을 만들어가기 때문에 부분적인 실행과 원하는 부분까지 실행해서 거기까지의 실행결과를 확인하게 해주는 것이 중요하다. 이러한 장점 때문에 많은 데이터 분석가들은 R을 주로 사용한다. 같은 이유로 다른 상용 통계 소프트웨어나 과학 연구 소프트에어들도 이런 환경을 지원하는 것들이 많다.

Python과 데이터 분석

Python은 비교적 배우기 쉬운 언어로 많은 인기를 가지고 있는 언어이지만 사용자가 많지 않았던 초기에는 데이터 분석을 하는데 적합한 언어가 아니었다. 문법에 특이하게 들여쓰기를 강제하는 규약이 있는데 이것은 인터랙티브 모드 사용이 매우 불편하게 했고 Python이 만들어지고 난 한참뒤까지 통계 분석에 필요한 기본 함수와 패키지가 많이 제공하지 않았다. 그러나 NumPy, Pandas, SciPy와 같은 수학적 계산과 테이블 형태의 데이터 관리를 위한 패키지가 늘어났고 개발환경인 Anaconda(아나콘다)를 비롯해서 Jupyter notebook(주피터 노트북)이 개발되면서 셀 단위로 코드 블럭을 나누고 따로 실행하는 환경이 지원되면서 인터랙티브 실행 문제까지 해결되었다. 현재 Python은 활용 범위가 넓어 웹개발, 데이터 프로세싱을 비롯해 데이터 분석, 기계학습을 비롯한 많은 분야에 쓴다.

어떤 언어를 쓸 것인가?

이 책에서는 Python을 사용하지만 데이터 분석을 할 때 R언어나 다른 좋은 도구를 사용하는 것에 관심이 있는 사람도 있을 것이다. R언어는 매우 뛰어난 함수형 언어로 대수학을 위한 계산, 데이터 시각화에 적합하고 매우 많은 통계 패키지들을 무료로 가져다 쓸 수 있다. 반면 대량 데이터프로세싱과 AI모델 개발, 웹애플리케이션 개발 같은 일반적인 프로그래밍을 하기에는 부적합난데 최근의 데이터 분석은 데이터 처리, 시각화, 웹 대시보드 같은 것과 같이 여러 종류의 결과물을 작성해야 하기 때문에 Python이 대응 할 수 있는 폭이 더 넓다고 할 수 있다.

R을 배우면 통계적 데이터 분석을 전문적으로 할 수 있지만 Python을 배우면 통계적인 데이터 분석은 R보다는 불편하지만 다른 범용적인 프로그래밍을 할 수도 있다. 물론 Python을 쓰는 것이 더 낫다는 것은 아니다. 데이터 분석을 전문적으로 하려는 사람은 R언어와 다른 도구를 같이 배우는 것도 필요하다. AI챗봇의 도움을 받으면 두 언어를 모두 해보는 것도 어렵지 않다. 지금 이 책을 쓰는 시점에서 주변을 보면 Python을 더 많이 선호하는 것 같다.

데이터 분석과 Python

Python은 범용 스크립트언어로 Perl이라는 유닉스, 리눅스 시스템에서 주로 사용하던 언어를 대체하기 만들어진 언어이다. 데이터분석 보다는 시스템 운영과 자동화 등과 관련된 목적으로 만들어짔고 그런 용도로 주로 사용되었다. 앞서 말했듯이 Python은 처음에는 시스템을 운영하기 위한 shell script(쉘 스크립트) 용도로만 쓰이다가 후에 데이터 처리와 관련된 기능이 보강되었고 커뮤니티(community)와 많은 사람들의 기여로 여러 추가 패키지가 생겨나고 보강되면서 데이터 분석도 할 수 있게 되었다. 게다가 범용 개발이 가능해서 웹개발, 애플리케이션, 업무 자동화, 크롤링과 같은 것도 하면 여러가지가 가능하다는 장점 때문에 더 널리 쓰이게 되었다.

Python에서 데이터 분석을 위해 배워야 할 내용

Python으로 데이터 분석을 하기 위해서 알아둬야 할 것이 있다. 한 번에 모두 다 익혀야 할 필요는 없지만 결국에는 모두 다 알아야 하는 것들이다.

1. 기본 Python 문법

Python을 사용하기 위해서는 기본 문법을 이해해야 하는데 이 책에서는 Python의 기본 문법을 설명하지는 않는다. 서문에 밝혔듯이 이 책은 Python 언어 초보자를 위한 책은 아니다. 하지만 간단하게 예제 코드를 보고 대략 어떤 것을 할 수 있는지 설명한다.

((프롬프트)): Python의 기본 문법을 모두 이해할 수 있는 간단한 예제 코드를 보여주세요. ((AI챗봇 답)):

# ── 1. 변수와 기본 자료형 ──
x = 10 # 정수(int)
y = 3.14 # 실수(float)
name = "Alice" # 문자열(str)
is_active = True # 불리언(bool)

# ── 2. 컬렉션 자료형 ──
numbers = [1, 2, 3, 4, 5] # 리스트(list)
fruits = ("apple", "banana", "cherry") # 튜플(tuple)
person = {"name": "Bob", "age": 25} # 딕셔너리(dict)
unique = {1, 2, 2, 3} # 집합(set) - 중복 제거

# ── 3. 조건문 ──
if x > 5:
print(f"x({x})는 5보다 큽니다.")
else:
print(f"x({x})는 5 이하입니다.")

# ── 4. 반복문 ──
# for 루프
for num in numbers:
print("num =", num)

# while 루프
i = 0
while i < 3:
print("while 반복:", i)
i += 1

# ── 5. 함수 정의 및 호출 ──
def greet(user_name):
"""인사말을 반환하는 함수"""
return f"Hello, {user_name}!"

print(greet(name))

# ── 6. 리스트 컴프리헨션 ──
# numbers에서 짝수만 골라 제곱한 새 리스트 생성
squares = [n**2 for n in numbers if n % 2 == 0]
print("짝수 제곱:", squares)

# ── 7. 예외 처리 ──
try:
result = x / 0
except ZeroDivisionError as e:
print("예외 발생:", e)

# ── 8. 클래스 정의 ──
class Dog:
species = "Canis familiaris" # 클래스 변수

def __init__(self, name, age):
self.name = name # 인스턴스 변수
self.age = age

def bark(self):
print(f"{self.name}가 짖습니다: 멍멍!")

my_dog = Dog("Buddy", 3)
print(f"{my_dog.name}{my_dog.age}살입니다.")
my_dog.bark()

# ── 9. 모듈 임포트와 사용 ──
import math
print("원주율:", math.pi)

AI챗봇의 답은 직접 해보면 위와 다르게 나올 수 있다. 하지만 역시 맥락에서 큰 차이는 없을 것이다. 간단하게 설명한다.

들여쓰기

코드 블럭을 구별할때 중괄호를 사용하지 않고 들여쓰기를 사용한다. 들여쓰기는 몇 간으로 해도 상관없지만 블럭의 첫줄이 들여쓴 것은 그 다음줄도 같은 간을 들여쓰기 해야 한다. 블럭이 새로 바뀌는 경우에는 들여쓰기 간 수를 바꿔도 된다. 들여쓰기에 탭을 사용해도 되지만 탭을 사용하면 4간으로 통일하지 않으면 오류가 발생한다. 탭과 공백을 같은 블럭에서 들여쓰기로 섞어쓰면 오류가 발생한다. 들여쓰기의 간 수는 공백 4개를 권장한다.

변수 대입

“변수명 = 값” 이렇게 한다. 변수명은 한글도 가능하지만 과거에 많은 문제가 생겼던 것 때문에 대부분 영문으로 한다. 변수명은 알파벳과 숫자, 언더바(_)를 사용할 수 있고 첫글자는 숫자로 시작할 수 없다. 대부분의 다른 컴퓨터 언어와 같다.

데이터 타입

변수의 타입은 문자열, 정수, 실수, 불리언, 리스트, 딕셔너리, 튜플, 집합 등이 있다. 변수에 대입한 값에 따라 변수의 타입도 자동으로 바뀌는 동적 타입 언어이다. 변수의 유형이 대입한 값에 따라 동적으로 바뀌는 것은 코드가 짧아지고 사람에게는 직관적이기 때문에 데이터 분석이나 과학 기술 프로그래밍에 적합하지만 뜻하지 않게 변수의 유형이 바뀌며서 예상치 못한 실행 오류나 계산 오류를 만들 수 있기 때문에 주의해야 한다. 예를 들면 숫자 “0”과 “0.0”을 비교하면

if 0 == 0.0:
print("0과 0.0은 같다")
else:
print("0과 0.0은 다르다")

같다고 나온다. 위에서는 변수를 대입한 것은 아니지만 정수값인 0과 실수값인 0.0의 타입을 동적으로 맞춰서 비교한다. 하지만 저수준 컴퓨터 프로그래밍에서는 정수 0과 실수 0.0이 다르다고 나오거나 타입이 달라서 비교할 수 없다는 오류가 발생하는 것이 맞다.

튜플 (Tuple)

튜플은 리스트와 비슷하지만 한번 만들어지면 안에 있는 변경할 수 없다. 비슷하게 생긴 리스트는 안에 있는 값을 변경할 수 있다.

# 튜플 예제
my_tuple = (1, 2, 3)
print(my_tuple[0]) # 1

# 튜플은 값을 변경할 수 없음
my_tuple[0] = 10 # 오류 발생(TypeError)
my_tuple = (1, 2, 3, 4) # 새로운 튜플 할당은 가능

# 리스트 예제
my_list = [1, 2, 3]
my_list[0] = 10 # 값 변경 가능
print(my_list) # [10, 2, 3]

위의 예에서 보면 튜플은 한번 만들어지면 안에 있는 값을 변경할 수 없다. 하지만 변수에 값을 대입해서 새로 정의하는 것은 가능하다. 튜플은 원래 수학에서 온 용어인데 숫자 집합이나 벡터를 표현하는 데 사용되는 것이다.

리스트 (List)

리스트는 튜플과 비슷하지만 안에 있는 값을 변경할 수 있다. 튜플과 리스트가 다른 점은 튜플은 메모리상에 값이 모두 함께 붙어 있어 한꺼번에 읽고 계산할 때 유리하다. 리스트는 반면 각 값이 메모리상에 떨어져 있을 수 있어 읽을 때 느린데 대신 값을 추가, 삭제, 변경이 가능하며 그런 작업을 할 때 훨씬 편리하다.

딕셔너리 (Dictionary)

딕셔너리는 키-값 쌍으로 이루어진 자료형이다. 키는 고유한 값이어야 하고 값은 어떤 타입의 값도 가능하다.

# 변수와 데이터 타입
name = "홍길동" # 문자열
age = 30 # 정수
height = 175.5 # 부동소수점
is_student = True # 불리언(참/거짓)

# 리스트(배열)
fruits = ["사과", "바나나", "오렌지"]
print(fruits[0]) # 첫 번째 항목 출력: 사과

# 딕셔너리(키-값 쌍)
person = {
"이름": "김철수",
"나이": 25,
"직업": "데이터 분석가"
}
print(person["이름"]) # 김철수

# 조건문
if age >= 20:
print("성인입니다.")
else:
print("미성년자입니다.")

# 반복문
for fruit in fruits:
print(fruit)

# 함수 정의
def calculate_average(numbers):
return sum(numbers) / len(numbers)

# 함수 호출
scores = [85, 90, 78, 92, 88]
average = calculate_average(scores)
print(f"평균 점수: {average}") # f-string을 사용한 포맷팅
# 패키지 불러오기
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# NumPy 배열 생성 및 연산
arr = np.array([1, 2, 3, 4, 5])
print(f"배열 평균: {np.mean(arr)}")

# pandas 데이터프레임 생성
df = pd.DataFrame({
"이름": ["김철수", "이영희", "박지민"],
"나이": [25, 28, 22],
"점수": [85, 92, 78]
})
print(df.head())

# 간단한 시각화
plt.figure(figsize=(8, 4))
sns.barplot(x="이름", y="점수", data=df)
plt.title("학생별 점수")
plt.show()

위의 소스코드에서는 쉽게 알아차릴수 없지만 Python은 들여쓰기(indent)를 강제하는 독특한 특징이 있다. 들여쓰기를 맞추기 않으면 오류가 발생한다.


def display_text():
print("안녕하세요")
print("반갑습니다") # 들여쓰기를 위와 맞추지 안았기 때문에 오류

들여쓰기를 몇 간으로 해야하는지는 강제하고 있지 않지만 보통 4간을 사용하며 몇 간을 쓰던 처음 코드 덩어리를 시작할 때 사용한 들여쓰기간을 그 이후에 블럭이 끝날때까지 맞추지 않으면 오류가 발생한다.

# 올바른 들여쓰기 예시
def calculate_sum(numbers):
total = 0
for number in numbers:
total += number
print(f"현재 합계: {total}")
return total

# 조건문 들여쓰기 예시
score = 85
if score >= 90:
print("A 학점")
elif score >= 80:
print("B 학점")
if score >= 85:
print("B+ 학점")
else:
print("C 학점 이하")

# 클래스 정의 들여쓰기 예시
class Student:
def __init__(self, name, age):
self.name = name
self.age = age

def introduce(self):
print(f"안녕하세요, 저는 {self.name}이고 {self.age}살입니다.")

코드 블럭 내에서만 맞춰주면 되고 코드 블럭이 바뀌면 들여쓰기의 간수는 바꿀 수 있다. 하지만 보통은 프로젝트 전체에서 들여쓰기 간 단위를 맞춘다

# 들여쓰기 오류 예시와 수정
def calculate_average(numbers):
total = 0
count = 0
for number in numbers:
total += number
count += 1 # 들여쓰기 오류: 'for' 블록 내에서 일관성 없음

if count > 0:
average = total / count
return average
else:
return 0 # 들여쓰기 오류: 'else' 블록 내에서 일관성 없음

# 수정된 코드
def calculate_average_fixed(numbers):
total = 0
count = 0
for number in numbers:
total += number
count += 1 # 들여쓰기 수정: 'for' 블록 내 일관성 유지

if count > 0:
average = total / count
return average
else:
return 0 # 들여쓰기 수정: 'else' 블록 내 일관성 유지

들여쓰기 규칙의 중요성

Python에서 들여쓰기는 단순한 코드 스타일이 아니라 문법의 일부입니다. 다른 프로그래밍 언어에서는 중괄호()나 begin/end 키워드로 코드 블록을 구분하지만, Python은 들여쓰기로 코드 블록을 구분합니다.

들여쓰기 관련 주요 규칙:

  1. 일관성 유지: 한 블록 내에서는 동일한 들여쓰기 수준을 유지해야 합니다.
  2. PEP 8 권장사항: Python 공식 스타일 가이드인 PEP 8에서는 4칸 공백을 권장합니다.
  3. 탭과 공백 혼용 금지: 한 파일 내에서 탭과 공백을 혼용하면 오류가 발생할 수 있습니다.

들여쓰기 오류 예시:

# 들여쓰기 오류 예시
def calculate_sum(numbers):
total = 0
for num in numbers:
total += num
print(f"현재 합계: {total}") # 들여쓰기 오류: for 블록 내 일관성 없음

return total

# 들여쓰기 혼합 오류 예시
def process_data(data):
results = []
if len(data) > 0:
for item in data:
# 탭과 공백 혼합 사용 (실제로는 보이지 않지만 오류 발생)
processed = item * 2 # 탭으로 들여쓰기
results.append(processed) # 공백으로 들여쓰기

return results

# 올바른 들여쓰기 예시
def analyze_numbers(numbers):
total = sum(numbers)
average = total / len(numbers) if numbers else 0

if average > 10:
print("평균이 10보다 큽니다.")
return "높은 값"
else:
print("평균이 10 이하입니다.")
return "낮은 값"

데이터 분석을 위한 주요 Python 패키지

기본 데이터 분석 패키지

  • NumPy: 고등 수학을 돕기 위한 수치 계산 라이브러리이며 벡터, 다차원 배열과 여러가지 수학 함수를 제공
  • pandas: 테이블 형태로 데이트를 다룰 수 있게 하는 패키지, 데이터프레임 자료 구조를 제공
  • SciPy: 과학 계산을 위한 라이브러리이며 공학에 관련딘 여러 함수, 최적화, 통계, 신호 처리 등 제공

numpy

numpy는 Numerical Python을 줄인 것으로 수학에 관련된 기본 기능을 지원한다. 기본 패키지 중에서 가장 중요한 것은 단연 numpy라고 할 수 있다. 많은 고등 수학과 과학 계산용 패키지들이 numpy에 의존성을 가지고 있을 정도로 수학과 관련된 기본적인 것을 제공한다. numpy는 수학가 관련된 자료구조인 벡터를 지원하며 간단한 수학 함수와 통계 함수를 제공한다. 기본 패키지가 아니므로 Python 설치 후에 별도로 설치해야 한다. colab 환경에는 기본으로 설치가 되어 있다. 보통 주피터랩으로 되어 있는 개발, 분석 환경에는 numpy를 비롯한 몇개의 필수 패키지를 설치해서 제공하지만 필수 패키지가 아니므로 직접 설치해야 할 수 있다는 것을 기억해야 한다.

numpy 기본 예제

import numpy as np

# 1. 배열 생성
print("1. 배열 생성")
arr1 = np.array([1, 2, 3, 4, 5]) # 1차원 배열
arr2 = np.array([[1, 2, 3], [4, 5, 6]]) # 2차원 배열
print("1차원 배열:", arr1)
print("2차원 배열:\n", arr2)

# 2. 특수 배열 생성
print("\n2. 특수 배열 생성")
zeros = np.zeros((2, 3)) # 0으로 채워진 2x3 배열
ones = np.ones((2, 2)) # 1로 채워진 2x2 배열
arange = np.arange(0, 10, 2) # 0부터 10까지 2 간격으로 배열 생성
linspace = np.linspace(0, 1, 5) # 0부터 1까지 균등하게 5개 요소 생성
print("zeros:\n", zeros)
print("ones:\n", ones)
print("arange:", arange)
print("linspace:", linspace)

# 3. 배열 연산
print("\n3. 배열 연산")
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print("a + b =", a + b) # 요소별 덧셈
print("a * b =", a * b) # 요소별 곱셈
print("a * 2 =", a * 2) # 스칼라 곱셈

# 4. 통계 함수
print("\n4. 통계 함수")
data = np.array([1, 2, 3, 4, 5])
print("평균:", np.mean(data))
print("합계:", np.sum(data))
print("표준편차:", np.std(data))
print("최소값:", np.min(data))
print("최대값:", np.max(data))

# 5. 배열 형태 변환
print("\n5. 배열 형태 변환")
arr = np.array([1, 2, 3, 4, 5, 6])
reshaped = arr.reshape(2, 3) # 1차원 배열을 2x3 배열로 변환
print("원본 배열:", arr)
print("변환된 배열:\n", reshaped)

# 6. 배열 인덱싱과 슬라이싱
print("\n6. 배열 인덱싱과 슬라이싱")
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("원본 배열:\n", arr)
print("arr[0, 0] =", arr[0, 0]) # 첫 번째 요소
print("arr[1:3, 1:3] =\n", arr[1:3, 1:3]) # 부분 배열 추출
print("arr[:, 1] =", arr[:, 1]) # 두 번째 열 추출

# 7. 선형대수 연산
print("\n7. 선형대수 연산")
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
print("행렬 곱셈:\n", np.dot(a, b))
print("전치 행렬:\n", a.T)
print("역행렬:\n", np.linalg.inv(a))
print("행렬식:", np.linalg.det(a))

numpy는 패키지를 임포트(import)할 때 as np와 같이 별칭으로 바꿔서 참조할 수 있게 하는데 이 것은 빈번하게 사용할때 잦은 타이핑과 코드가 길어지는 것을 더 편하게 하기 위한 의도이고 np는 관용적으로 매우 많은 코드에서 numpy의 단축형으로 쓰고 있다.

numpy가 없다면 파이썬을 이용해서는 데이터 분석, 데이터 과학, 공학, 수학 등을 하는 것이 매우 힘들다고 생각하면 된다. 대체할 수 있는 것을 직접 만들어 사용하거나 다른 것을 사용할 수 있다면 가능하지만 그러기는 너무 어렵다.

판다스 pandas

판다스(pandas)는 "Python Data Analysis Library"의 약자로, 파이썬에서 데이터 분석을 위해 가장 널리 사용되는 패키지 중 하나이다. 이름의 유래는 "panel data"와 "Python data analysis"에서 따온 것으로 되어 있는데 정확히 약어로 맞아 떨어지지는 않는다, 다양한 형태의 데이터(특히 표 형태의 데이터)를 쉽고 효율적으로 다룰 수 있게 만들었다.

판다스의 주요 특징

  • 데이터프레임(DataFrame): 행과 열로 구성된 2차원 표 형태의 데이터를 다루는 자료구조를 제공
  • 시리즈(Series): 1차원 데이터(벡터)를 다루는 자료구조를 제공
  • 강력한 데이터 처리 기능: 데이터 정제, 결측치 처리, 필터링, 그룹화, 집계, 피벗 등 다양한 데이터 조작 기능을 지원
  • 다양한 파일 포맷 지원: CSV, Excel, SQL, JSON 등 다양한 데이터 파일 읽고 쓰기
  • 시간/날짜 데이터 처리: 시계열 데이터 분석에 관련된 기능 지원

pandas는 데이터 분석, 통계, 머신러닝, 금융, 공학 등 다양한 분야에서 표(Tabular) 형태의 데이터를 다루고 분석할 때 필수적으로 사용되는 라이브러리이다. pandas의 DataFrame은 R의 data.frame이라는 자료구조에서 영감을 받아 만들어졌으며, 파이썬 환경에서 R의 data.frame과 거의 동일한 방식으로 데이터를 다룰 수 있게 해준다. R을 사용해서 데이터 분석을 할 때 data.frame을 사용하지 않는다면 작업은 불가능에 가깝다. 판다스가 나오기 전에는 파이썬으로 데이터 분석을 하기 어려웠던 것이 R의 data.frame과 같은 것이 없었기 때문인데 어쨌든 지금은 있고 필수에 가까운 패키지가 되었다.

pandas 사용법은 익숙해지기 전까지는 꽤 어려운 편이다. 여기에서는 pandas가 csv파일이나 데이터베이스에서 가져온 테이블 형태의 데이터를 다루기 위한 패키지라는 것을 기억하고 사용법은 실제로 코드를 작성하면서 이해하는 것니 더 나을 수 있다.

싸이파이 scipy

scipy는 "Scientific Python"의 줄임말이다. 즉, 파이썬에서 사용할 수 있는 과학, 공학에 관련된 여러 함수와 기능을 제공한다. numpy를 기반으로 하기 때문에 numpy가 있어야 작동하며 선형대수, 최적화, 적분, 보간, 신호처리, 통계 등 고급 과학 연산에 필요한 기능을 가지고 있다.

# scipy를 활용한 간단한 예제

# 예시: scipy를 이용한 선형방정식 풀이
# 2x + 3y = 8
# 3x + 2y = 7

import numpy as np
from scipy import linalg

A = np.array([[2, 3], [3, 2]])
b = np.array([8, 7])

# 선형방정식 Ax = b의 해를 구함
x = linalg.solve(A, b)
print("선형방정식의 해:", x)

# 설명:
# scipy의 linalg.solve 함수는 Ax = b 형태의 선형방정식을 빠르고 정확하게 풀어줍니다.
# 위 예제에서는 x, y에 해당하는 값을 구할 수 있습니다.